package com.zhangwei.liwushuo.utils;


import android.content.Context;
import android.os.Environment;
import android.os.StatFs;

import com.zhangwei.liwushuo.config.AppConfig;

import org.androidannotations.annotations.EBean;
import org.androidannotations.annotations.RootContext;

import java.io.File;

/**
 * @说 明：
 * @项目名称：LiWuShuo
 * @包 名： com.zhangwei.liwushuo.utils
 * @类 名： FileUtils
 * @创 建人： zhangwei
 * @创建时间：2015-08-14 19:28
 * @版 本：v1.0
 * @修 改人：
 * @修改时间：
 * @修改备注：
 */
@EBean
public class FileUtils {
    @RootContext
    Context context;

    /**
     * storage
     *
     * @return
     */
    public String getAppCache() {
        String appCache;
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            appCache = getExternalMemoryPath() + AppConfig.APP_CACHE;
        } else {
            appCache = getInternalMemoryPath() + File.separator + context.getPackageName();
        }
        File appFile = new File(appCache);
        if (!appFile.exists()) {
            appFile.mkdir();
        }
        return appCache;
    }

    /**
     * @return ROM存储路径
     */
    private String getInternalMemoryPath() {
        return Environment.getDataDirectory().getPath();
    }

    /**
     * "/mnt/sdcard"
     *
     * @return 内置sd卡路径
     */
    private String getExternalMemoryPath() {
        return Environment.getExternalStorageDirectory().getPath();
    }

    /**
     * /mnt/sdcard1
     *
     * @return 外置sd卡路径
     */
    private String getSDCard2MemoryPath() {
        return "/mnt/sdcard1";
    }

    /**
     * @param path 文件路径
     * @return 文件路径的StatFs对象
     * @throws Exception 路径为空或非法异常抛出
     */
    private StatFs getStatFs(String path) {
        try {
            return new StatFs(path);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * @param stat 文件StatFs对象
     * @return 剩余存储空间的MB数
     */
    public float calculateSizeInMB(StatFs stat) {
        if (stat != null)
            return stat.getAvailableBlocks()
                    * (stat.getBlockSize() / (1024f * 1024f));
        return 0.0f;
    }

    /**
     * @return ROM剩余存储空间的MB数
     */
    public float getAvailableInternalMemorySize() {

        String path = getInternalMemoryPath();// 获取数据目录
        StatFs stat = getStatFs(path);
        return calculateSizeInMB(stat);
    }

    /**
     * @return 内置SDCard剩余存储空间MB数
     */
    public float getAvailableExternalMemorySize() {
        String path = getExternalMemoryPath();// 获取数据目录
        StatFs stat = getStatFs(path);
        return calculateSizeInMB(stat);

    }

    /**
     * @return 外置SDCard剩余存储空间MB数
     */
    public float getAvailableSDCard2MemorySize() {
        String path = getSDCard2MemoryPath(); // 获取数据目录
        StatFs stat = getStatFs(path);
        return calculateSizeInMB(stat);

    }

}
